﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAOQLDV;
using System.Data;
using DTOQLDV;

namespace BUSQLDV
{
    public class BUSXuLi
    {
        public delegate void XuLiCount();
        public static XuLiCount _xuLiCount;
        public static bool KiemTraKetNoi()
        {
            return DAOXuLi.KiemTraKetNoi();
        }
        public static List<DTODuLieuEX> DocDuLieuTuFileExcel(String fileName)
        {
            return DAOXuLi.DocDuLieuTuFileExcel(fileName);
        }
        public static void MapDuLieu(List<DTODuLieu> dsDL, List<DTODuLieuEX> dsDLEX)
        {
            try
            {
                String tenDiaDiem = "", tenDichVu = "", tenDuong = "", tenPhuong = "", tenQuanHuyen = "", tenTinhThanh = "";
                int maDiaDiem=0, maDichVu=0, maDuong=0, maPhuong=0, maQuanHuyen=0, maTinhThanh=0;
                int n = dsDLEX.Count - 1;
                DTODuLieuEX dtoDLEX;
                for (int i = n; i >= 0; i--)
                {
                    DTODuLieu dtoDL = new DTODuLieu();
                    dtoDLEX = dsDLEX[i];
                    if (String.Compare(dtoDLEX.TenDiaDiem,tenDiaDiem,true)!=0)
                    {
                        maDiaDiem = BUSDiaDiem.LayMaDiaDiem(dtoDLEX.TenDiaDiem);
                        if (maDiaDiem == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenDiaDiem = dtoDLEX.TenDiaDiem;
                            dtoDL.MaDiaDiem = maDiaDiem;
                        }
                    }
                    else
                    {
                        dtoDL.MaDiaDiem = maDiaDiem;
                    }
                    if (String.Compare(dtoDLEX.TenDichVu,tenDichVu,true)!=0)
                    {
                        maDichVu = BUSDichVu.LayMaDichVu(dtoDLEX.TenDichVu);
                        if (maDichVu == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenDichVu = dtoDLEX.TenDichVu;
                            dtoDL.MaDichVu = maDichVu;
                        }
                    }
                    else
                    {
                        dtoDL.MaDichVu = maDichVu;
                    }
                    if (String.Compare(dtoDLEX.Duong,tenDuong,true)!=0)
                    {
                        maDuong = BUSDuong.LayMaDuong(dtoDLEX.Duong);
                        if (maDuong == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenDuong = dtoDLEX.Duong;
                            dtoDL.MaDuong = maDuong;
                        }
                    }
                    else
                    {
                        dtoDL.MaDuong = maDuong;
                    }
                    if (String.Compare(dtoDLEX.Phuong,tenPhuong,true)!=0)
                    {
                        maPhuong = BUSPhuong.LayMaPhuong(dtoDLEX.Phuong);
                        if (maPhuong == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenPhuong = dtoDLEX.Phuong;
                            dtoDL.MaPhuong = maPhuong;
                        }
                    }
                    else
                    {
                        dtoDL.MaPhuong = maPhuong;
                    }
                    if (String.Compare(dtoDLEX.QuanHuyen,tenQuanHuyen,true)!=0)
                    {
                        maQuanHuyen = BUSQuanHuyen.LayMaQuanHuyen(dtoDLEX.QuanHuyen);
                        if (maQuanHuyen == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenQuanHuyen = dtoDLEX.QuanHuyen;
                            dtoDL.MaQuanHuyen = maQuanHuyen;
                        }
                    }
                    else
                    {
                        dtoDL.MaQuanHuyen = maQuanHuyen;
                    }
                    if (String.Compare(dtoDLEX.TinhThanh,tenTinhThanh,true)!=0)
                    {
                        maTinhThanh = BUSTinhThanh.LayMaTinhThanh(dtoDLEX.TinhThanh);
                        if (maTinhThanh == 0)
                        {
                            continue;
                        }
                        else
                        {
                            tenTinhThanh = dtoDLEX.TinhThanh;
                            dtoDL.MaTinhThanh = maTinhThanh;
                        }
                    }
                    else
                    {
                        dtoDL.MaTinhThanh = maTinhThanh;
                    }
                    dtoDL.SoNha = dtoDLEX.SoNha;
                    dtoDL.KinhDo = dtoDLEX.KinhDo;
                    dtoDL.ViDo = dtoDLEX.ViDo;
                    dtoDL.ChuThich = dtoDLEX.ChuThich;
                    dsDL.Add(dtoDL);
                    dsDLEX.RemoveAt(i);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }        
        public static void CaiDatDuLieuNhap(List<DTODuLieuEX> dsDL, bool[]arr)
        {
            try
            {
                String tenDiaDiem = "", tenDichVu="", tenDuong="", tenPhuong="", tenQuanHuyen="", tenTinhThanh="";
                int kq=0;
                DTODiaDiem dtoDD = new DTODiaDiem();
                DTODichVu dtoDV = new DTODichVu();
                DTODuong dtoD = new DTODuong();
                DTOPhuong dtoP = new DTOPhuong();
                DTOQuanHuyen dtoQ = new DTOQuanHuyen();
                DTOTinhThanh dtoTT = new DTOTinhThanh();
                foreach (DTODuLieuEX dtoDLEX in dsDL)
                {
                    if (String.Compare(dtoDLEX.TenDiaDiem,tenDiaDiem,true)!=0)
                    {
                        kq = BUSDiaDiem.LayMaDiaDiem(dtoDLEX.TenDiaDiem);
                        if (kq == 0 && arr[0])
                        {                           
                            dtoDD.TenDiaDiem = dtoDLEX.TenDiaDiem;
                            BUSDiaDiem.ThemDiaDiem(dtoDD);
                            SESSION._dsDiaDiem.Add(dtoDD);
                        }
                        tenDiaDiem = dtoDLEX.TenDiaDiem;
                    }
                    if (String.Compare(dtoDLEX.TenDichVu,tenDichVu,true)!=0)
                    {
                        kq = BUSDichVu.LayMaDichVu(dtoDLEX.TenDichVu);
                        if (kq == 0 && arr[1])
                        {                           
                            dtoDV.TenDichVu = dtoDLEX.TenDichVu;
                            BUSDichVu.ThemDichVu(dtoDV);
                            SESSION._dsDichVu.Add(dtoDV);
                        }
                        tenDichVu = dtoDLEX.TenDichVu;
                    }
                    if (String.Compare(dtoDLEX.Duong,tenDuong,true)!=0)
                    {
                        kq = BUSDuong.LayMaDuong(dtoDLEX.Duong);
                        if (kq == 0 && arr[2])
                        {                           
                            dtoD.TenDuong = dtoDLEX.Duong;
                            BUSDuong.ThemDuong(dtoD);
                            SESSION._dsDuong.Add(dtoD);
                        }
                        tenDuong = dtoDLEX.Duong;
                    }
                    if (String.Compare(dtoDLEX.Phuong,tenPhuong,true)!=0)
                    {
                        kq = BUSPhuong.LayMaPhuong(dtoDLEX.Phuong);
                        if (kq == 0 && arr[3])
                        {                           
                            dtoP.TenPhuong = dtoDLEX.Phuong;
                            BUSPhuong.ThemPhuong(dtoP);
                            SESSION._dsPhuong.Add(dtoP);
                        }
                        tenPhuong = dtoDLEX.Phuong;
                    }
                    if (String.Compare(dtoDLEX.QuanHuyen,tenQuanHuyen,true)!=0)
                    {
                        kq = BUSQuanHuyen.LayMaQuanHuyen(dtoDLEX.QuanHuyen);
                        if (kq == 0 && arr[4])
                        {                            
                            dtoQ.TenQuanHuyen = dtoDLEX.QuanHuyen;
                            BUSQuanHuyen.ThemQuanHuyen(dtoQ);
                            SESSION._dsQuanHuyen.Add(dtoQ);
                        }
                        tenQuanHuyen = dtoDLEX.QuanHuyen;
                    }
                    if (String.Compare(dtoDLEX.TinhThanh,tenTinhThanh,true)!=0)
                    {
                        kq = BUSTinhThanh.LayMaTinhThanh(dtoDLEX.TinhThanh);
                        if (kq == 0 && arr[5])
                        {                           
                            dtoTT.TenTinhThanh = dtoDLEX.TinhThanh;
                            BUSTinhThanh.ThemTinhThanh(dtoTT);
                            SESSION._dsTinhThanh.Add(dtoTT);
                        }
                        tenTinhThanh = dtoDLEX.TinhThanh;
                    }
                    _xuLiCount();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }       
    }
}
